From: Jan Beulich Date: Fri, 23 Jan 2015 14:03:28 +0000 (+0100) Subject: x86/HVM: replace plain number in hvm_combine_hw_exceptions() X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3877 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=81db678e4dff0a398fecb59fb92fa41df9954e9c;p=xen.git x86/HVM: replace plain number in hvm_combine_hw_exceptions() While doing so also take care of #VE here (even if we don't make use of it yet). Note that contributory_exceptions, other than the original 0x7c01 constant, doesn't include #PF anymore, but the check where the variable is used is after one that already filtered out #PF. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Reviewed-by: TIm Deegan --- diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index c7984d10c4..24f333351e 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -205,6 +205,16 @@ int hvm_event_needs_reinjection(uint8_t type, uint8_t vector) */ uint8_t hvm_combine_hw_exceptions(uint8_t vec1, uint8_t vec2) { + const unsigned int contributory_exceptions = + (1 << TRAP_divide_error) | + (1 << TRAP_invalid_tss) | + (1 << TRAP_no_segment) | + (1 << TRAP_stack_error) | + (1 << TRAP_gp_fault); + const unsigned int page_faults = + (1 << TRAP_page_fault) | + (1 << TRAP_virtualisation); + /* Exception during double-fault delivery always causes a triple fault. */ if ( vec1 == TRAP_double_fault ) { @@ -213,11 +223,12 @@ uint8_t hvm_combine_hw_exceptions(uint8_t vec1, uint8_t vec2) } /* Exception during page-fault delivery always causes a double fault. */ - if ( vec1 == TRAP_page_fault ) + if ( (1u << vec1) & page_faults ) return TRAP_double_fault; /* Discard the first exception if it's benign or if we now have a #PF. */ - if ( !((1u << vec1) & 0x7c01u) || (vec2 == TRAP_page_fault) ) + if ( !((1u << vec1) & contributory_exceptions) || + ((1u << vec2) & page_faults) ) return vec2; /* Cannot combine the exceptions: double fault. */